Cmake 错误合集 | 您所在的位置:网站首页 › linking sound什么意思 › Cmake 错误合集 |
其实,每次碰到要安装一些软件啊,通常软件的源码都是c/c++,刚开始LZ不理解,从来都是跟着Readme.txt,一步步安装,如果说一帆风顺的把软件安装好了,也就罢了,很可能不会深究到底 cmake . cmake .. make all make -j4 make install 12345上述列出来的到底是什么含义,直接机械式地先安装依赖库,经常用的也就是: sudo apt-get install #balala...一堆依赖库的名字 1安装完依赖库,通常就会: mkdir build cd build cmake .. make make install 12345简直是教科书般的标准流程,但是很多情况下,在camke这一块儿就会出错,LZ也是才接触这些,之前碰到很多的cmake错误东一个博客西一个博客一查,虽然问题解决了,但也没留下啥具体解决方案,或者报的错误是哪些,所以,LZ决定还是得新开一篇博客,把碰到的cmake错误汇总到一起。 哈哈,cmake的时候每次应该都最怕看见: Configuring incomplete errors occurred!/(ㄒoㄒ)/~~** 1.Cannot find source file. SRC_LIST. Tried extensions .c .C .c++ …add_executable called with incorrect number of arguments 这个cmake找不到对应的的文件,LZ犯这个错误的原因是 #wrong one add_executable(hello SRC_LIST) #right one add_executable(hello ${SRC_LIST}) 12345这是为了输出一个可执行文件,第一行的代码是在找文件名为SRC_LIST的文件,但实际上,这是LZ定义的一个变量,在cmake中引用定义的变量是要加${SRC_LIST}这个符号的。 2.make: … empty variable name. stop. 不存在空的变量名称。停止。。。 这是因为输入的make后面的变量并没有定义好,LZ犯错的原因如下: #wrong one make VERBOSE = 1 #right one make VERBOSE=1 12345小伙伴看出来哪里有不同的嘛?没错!等式左右LZ习惯性的打了空格,然后就光荣的报错了/(ㄒoㄒ)/~~ 上面代码的意思是可以看到make构建的详细过程。 3.add_executable cannot create target “hello” because another target with the same name already exists. The existing target is an executable created in source directory 报错都是一长段,习惯就好,主要看具体报错的位置和错误类型,上面错误是LZ把两个可执行文件的文件名定义成一样的了,那是肯定得报错了,双胞胎还得有不同呢。。。 4.Parse error in command line argument -DCMAKE_INSTALL_PREFIX. Should be: VAR: type=value CMake Error: No cmake script provided. CMake Error: Problem processing arguments. Aborting 其实,这个错误是在定义安装目录的时候报错的,也就是使用-DCMAKE_INSTALL_PREFIX的时候出问题的,LZ把正确的和错误的还是都贴出来: #wrong cmake -DCMAKE_INSTALL_PREFIX = /tmp/t2/usr #right cmake -DCMAKE_INSTALL_PREFIX=/tmp/t2/usr 123456又是老问题,等式左右两边加了空格,这真的是写代码的习惯性问题,所以这种编译错误还是对于LZ来说会经常碰到。。。 5.CMake Warning(dev) in CMakeLists.txt: No cmake_minimum_required command is present. A line of code such as cmake_minimum_required(VERSION 2.8) should be added at the top of the file 这其实都不能算是个error,只是一个warning,如果在有些IDE当中,如果你没有定义cmake的最低版本,它会帮你自动添加这行代码的: cmake_minimum_required(VERSION 2.8) 1cmake对于命令的大小写不敏感,但是对于变量的大小写是敏感的。还有一个问题,就是注意一下自己安装的cmake的版本,不要设置的最低版本比你安装的版本还要高,那就直接没办法编译了。 怎么查看你的cmake版本? #在终端中输入 cmake --version #终端显示 cmake version 2.8.12.2 123456.add_library cannot create target “hello” because another target with the same name already exists. The existing target is a shared library create in source directory 这是LZ在编译动态库和静态库出现的问题,如果直接把静态库和动态库直接使用相同的命名的话,就会报上述的错误。 #wrong add_library(hello SHARED ${LIBHELLO_SRC}) add_library(hello STATIC ${LIBHELLO_SRC}) #right(如果不要求静态库和动态库的名字相同的话) add_library(hello SHARED ${LIBHELLO_SRC}) add_library(hello_static STATIC ${LIBHELLO_SRC}) #right(如果需要两个库名字相同的话) add_library(hello SHARED ${LIBHELLO_SRC}) add_library(hello STATIC ${LIBHELLO_SRC}) set_target_properties(hello_static PROPERTIES OUTPUT_NAME "hello") 123456789101112137.CMAKE Error at lib/cmake_install.cmake:48(FILE): file INSTALL cannot copyfile, “source path” to “target path” Call stack(most recent call first):cmake_install.cmake:37(INCLUDE) 看到这个报错LZ还是会一脸懵逼的,因为只是报一个无法拷贝文件的问题,所以还是应该会想到是权限不够的问题,虽然有文章建议说安装软件的时候尽量不要用sudo但是,有些软件不用sudo根本没法安装,这其实还是蛮矛盾的存在,所以咯: #报错的安装方法 make install #解决方案 sudo make install 12345如果报permiss denied感觉错误应该更好找。。。 8.Cannot specify link libraries for target “curltest” which is not built by the project 其实LZ犯这个错误也是很愚蠢的,LZ先写了target_link_libraries(curltest curl),然后定义的add_executable(curltest main.c),单纯的把顺序写反了,所以程序找不到curltest的定义。。。真是一点都不智能。还是没有养成写CMakeLists.txt的良好习惯。 9.Parse error.Function missing ending “)”. End of file reached 报的错误是解析错误,是因为圆括号不对称,导致直接程序找到文章结尾了,注意查找对应括号就行了。 其实还会遇到很多其它错误啦,只能遇到一个解决一个咯O(∩_∩)O |
CopyRight 2018-2019 实验室设备网 版权所有 |